/*                          UX-Framework                               
 *                                                                 
 *  iZE Co.,Ltd. Copyright 2009 All rights reserved.          
 *  This file is distributed under the terms of the GNU Lesser 
 *  General Public License, described in file LICENSE.                                     
 */
package jp.ize.ux.components;

// {{{ imports
import jp.ize.ux.UXObject;
import jp.ize.ux.states.UXBasicState;
import jp.ize.ux.UXController;
import jp.ize.ux.UXInteraction;
// }}}
// {{{ enum ScrollPolicy
enum ScrollPolicy
{
	/** Area内のコンポーネントがサイズを越えた場合にスクロールバーを表示します。 */
	AUTO;
	/** 常にスクロールバーを表示します。*/
	ON;
	/** 常にスクロールバーを表示しません。*/
	OFF;
}
// }}}
// {{{ class UXScrollAreaState extends UXBasicState
/**
 * UXScrollAreaState クラス<br>
 * UXScrollAreaの現在の状態を表すオブジェクトです。
 */
class UXScrollAreaState extends UXBasicState
{
	// {{{ public var horizontalScrollBar( default, default ) : UXScrollBar;
	/**
	 * 水平スクロールバーの参照を取得します。
	 */
	public var horizontalScrollBar( default, null ) : UXScrollBar;
	// }}}
	// {{{ public var horizontalScrollPolicy( default, default ) : ScrollPolicy;
	/**
	 * 水平スクロールバーのポリシーを示す値を取得または設定します。
	 */
	public var horizontalScrollPolicy( default, default ) : ScrollPolicy;
	// }}}
	// {{{ public var verticalScrollBar( default, default ) : UXScrollBar;
	/**
	 * 垂直スクロールバーの参照を取得します。
	 */
	public var verticalScrollBar( default, null ) : UXScrollBar;
	// }}}
	// {{{ public var verticalScrollPolicy( default, default ) : ScrollPolicy;
	/**
	 * 垂直スクロールバーのポリシーを示す値を取得または設定します。
	 */
	public var verticalScrollPolicy( default, default ) : ScrollPolicy;
	// }}}
	// {{{ public var auto(default, default) : Bool
	/**
	 * 子要素の動きに従ってスクロールバーを出現・消失・伸縮させる動作を自動的に行うかどうかのフラグ。デフォルトはtrueです。
	 */
	public var auto(default, default) : Bool;
	// }}}
}
// }}}
// {{{ class UXScrollArea extends UXComponent
/**
 * UXScrollAreaクラス<br>
 * スクロール可能な領域を実現するコンポーネントクラスです。縦方向、横方向それぞれのスクロールバーを
 * 常に表示する、常に表示しない、必要な時のみ表示するのいずれかを選んで設定することができます。<br>
 *
 * @author		iZE Co., Ltd.<br>
 * @version		$Id$<br>
 */
class UXScrollArea extends UXComponent
{
	// {{{ properties

	private var _state : UXScrollAreaState;

	// }}}
	// {{{ public var ctrl : UXController<UXScrollAreaState>;
	/**
	 * このコンポーネント内でのインタラクションを管理するコントローラークラスのインスタンスです。
	 */
	public var ctrl : UXController<UXScrollAreaState>;
	// }}}
	// {{{ public function new()
	/**
	 * コンストラクターです。
	 * 引数の横方向、縦方向のスクロールバーポリシーを受け取ってスクロールエリアインスタンスを返します。
	 * デフォルト値は両方ともにAUTOです。
	 */
	public function new( ?hScrollPolicy : ScrollPolicy, ?vScrollPolicy : ScrollPolicy )
	{
		super();
		if (hScrollPolicy == null) hScrollPolicy = AUTO;
		if (vScrollPolicy == null) vScrollPolicy = AUTO;
	}
	// }}}
	// {{{ public function addChild( child : UXObject ) : Void
	/**
	 * 子要素を加えます。
	 */
	public override function addChild( child : UXObject ) : Void
	{
		/* with flash.
		 * 子要素のrenderイベントを取得して、自分自身の範囲と子要素の範囲を考慮して、
		 * 必要であればスクロールバーを更新します。
		 */
	}
	// }}}
	// {{{ public function removeChild( child : UXObject ) : Void
	/**
	 * 指定された子要素をコンテナから削除します。
	 */
	public override function removeChild( child : UXObject ) : Void
	{
	}
	// }}}
	// {{{ public function ensure() : Void
	/**
	 * 子要素の位置を見てスクロールバーの設定を行います。
	 */
	public function ensure() : Void
	{
	}
	// }}}
	// {{{ public function update( updator : UXScrollAreaState -> Void ) : Void
	/**
	 * このコンポーネントの状態を直接変更するメソッドです。状態のどんな操作も可能になるので、
	 * このメソッドの使用には注意が必要です。
	 */
	public function update( updator : UXScrollAreaState -> Void ) : Void
	{
		updator( _state );
	}
	// }}}
}
// }}}
